██████╗ ███████╗████████╗██╗██████╗ ███████╗██████╗ ██╗ █████╗
██╔══██╗██╔════╝╚══██╔══╝██║██╔══██╗██╔════╝██╔══██╗██║██╔══██╗
██████╔╝█████╗ ██║ ██║██████╔╝█████╗ ██║ ██║██║███████║
██╔══██╗██╔══╝ ██║ ██║██╔═══╝ ██╔══╝ ██║ ██║██║██╔══██║
██║ ██║███████╗ ██║ ██║██║ ███████╗██████╔╝██║██║ ██║
╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚═════╝ ╚═╝╚═╝ ╚═╝
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Prolog
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
Il mwbqProlog (contrazione del mwbgfrancese mwbwmwcaPROgrammation en mwcqLOGique) è un mwcglinguaggio di programmazione che adotta il mwcwparadigma di mwdaprogrammazione logica.
È stato ideato da mwdgRobert Kowalski (aspetto teorico), Marten Van Emdem (dimostrazione sperimentale) e implementato da Alain Colmerauer negli mweqanni settanta, e costituisce un tentativo di costruire un linguaggio di programmazione che consenta l'espressione del problema in forma logica, invece che in forma di un mwegalgoritmo di soluzione eseguibile dalla macchina. L'attuale implementazione di Prolog è dovuta in gran parte all'efficiente codifica di David H.D. Warren, implementata tramite la sua mwfaWarren Abstract Machine (mwfq1983).
Il Prolog è impiegato in molti programmi di mwfwintelligenza artificiale; la sintassi e la semantica sono molto semplici e chiare, in quanto lo scopo per cui venne ideato era quello di fornire uno strumento di lavoro a linguisti privi di conoscenze informatiche.
Il Prolog si basa sul mwgqcalcolo dei predicati (precisamente il calcolo di predicati del primo ordine); tuttavia la sintassi è limitata a formule dette mwggclausole di Horn che sono disgiunzioni di mwgwletterali del primo ordine, quantificate universalmente, con al più un letterale positivo.
L'esecuzione di un mwhqprogramma Prolog è comparabile alla dimostrazione di un mwhgteorema mediante la mwhwregola di inferenza detta mwiarisoluzione (introdotta da mwiqRobinson nel mwig1965). I concetti fondamentali sono l'unificazione, la mwiwricorsione in coda e il mwjabacktracking.
Contents
• Sintassi
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Sintassi
Nel Prolog, la logica del programma è espressa sotto forma di relazioni, e le attività di calcolo vengono attivate da un'interrogazione relativa a tali relazioni.
Tipi di dati
L'elemento generico del Prolog si chiama mwlqtermine. I termini possono essere mwlgcostanti (mwlwatomi o mwmanumeri), mwmqvariabili o mwmgtermini composti.
• Un mwnqatomo è un nome generico senza significato intrinseco, es.: mwngx, mwnwblu, mwoa'Taco', mwoq'questo signore'.
• Un mwownumero può essere intero o decimale.
• Una mwpqvariabile è indicata per mezzo di una stringa di lettere, numeri e underscore (_) che comincia con una maiuscola o un trattino basso.
• Un mwpwtermine composto è formato da un atomo detto "funtore" e da uno o più argomenti - anch'essi termini - scritti tra parentesi e separati da virgole, p.es. mwqadata(27,'marzo',1980) mwqqanno_modello_auto('Mazda','cx 5',1986) e mwqg'Amici'(zelda,[tom,jim]).
Casi speciali di termini composti:
• Una mwrglista è una collezione ordinata di termini, separati da virgole; viene indicata per mezzo di parentesi quadre; è ammessa la lista vuota mwrw[]. Esempi: mwsa[1,2,3] e mwsq[rosso,verde,blu].
• Una mwswstringa è una sequenza di caratteri delimitata da doppi apici ("), p.es. mwta"essere o non essere".
Regole e fatti
Una mwtwregola ha la forma:
Testa :- Corpo.
che si legge: "Testa è vera se Corpo è vero." (Si noti che la regola termina con un punto.)
Un singolo termine (anche composto), senza il segno mwwq:-, viene chiamato mwwgfatto. I fatti equivalgono a regole senza corpo, che sono considerate automaticamente vere. Un esempio di fatto è:
gatto(tommaso).
Al di là dell'uso strettamente previsto dalla teoria, il Prolog offre anche dei predicati speciali che servono per input/output e altre attività accessorie. P.es. mwywwrite/1 visualizza un termine sullo schermo.
Programma di esempio
Hello, world!
Permutazioni
La potenza di Prolog non risiede comunque nella sua gestione dell'input/output, quanto nella possibilità di rappresentare semplicemente concetti complessi, ad esempio algoritmi mwdacombinatori. Ecco un programma che calcola tutte le possibili permutazioni di una parola data come lista di caratteri:
permutation([],[]).
permutation(Xs,[Z|Zs]) :- select(Z,Xs,Ys), permutation(Ys,Zs).
select(X,[X|Xs],Xs).
select(Y,[X|Xs],[X|Ys]) :- select(Y,Xs,Ys).
Meta-Interpretazione
In Prolog è semplice scrivere interpreti e compilatori. Ad esempio, un meta-interprete di Prolog (cioè un interprete Prolog scritto in Prolog) è costituito da solo 3 linee di codice:
vanilla(true).
vanilla((A,B)):- vanilla(A), vanilla(B).
vanilla(X):- X\==true, clause(X,B), vanilla(B).
Implementazioni
• Amzi! Prolog
• Ciao Prolog
• ECLiPSe, su eclipseclp.org.
• JIProlog, su jiprolog.com.
• Lpa Prolog
• Prolog.NET
• SICStus Prolog
• Strawberry Prolog
• tuProlog, su apice.unibo.it (archiviato dall'url originale il 17 marzo 2019).
• Visual Prolog (ex Turbo Prolog)
• XSB
• YAP Prolog
Bibliografia
• citeref-list-8-9Le basi logiche del Prolog (JPG), in LIST, anno 5, n. 8/9, Roma, EDICOMP, settembre/ottobre 1987, pp. 28-30, OCLC 955780660.
• mw3gIl Prolog strumento principe, in Intelligenza Artificiale, n. 1, Milano, Arcadia, 1988, pp. 8-12.
• mw4a(EN) Patrick Blackburn, Johan Bos, Kristina Striegnitz, mw4qmw4gLearn Prolog Now! mw4wArchiviato il 26 agosto 2007 in Internet Archive., College Publications, 2006, ISBN 1-904987-17-6
• mw5w(EN) J. A. Robinson, mw6aA Machine-Oriented Logic Based on the Resolution Principle, in mw6qJournal of the Association for Computing Machinery, 12(1), gennaio 1965.
• mw6w(EN) Leon Sterling e Ehud Y. Shapiro, The Art of Prolog Advanced Programming Techniques, MIT Press, 1994, ISBN 9780262193382.
• mw7q(EN) Ivan Bratko, Prolog Programming for Artificial Intelligence, Pearson Education (US), 2011, ISBN 9780321417466.
Voci correlate
Altri progetti
Altri progetti
• Wikibooks
• Wikibooks contiene testi o manuali sul Prolog
Collegamenti esterni
• mw-a(EN) Prolog: The ISO standard documents, su pauillac.inria.fr.
• mw-g(EN) mw-wProlog.info Notizie e risorse sul Prolog e AI.